package comandos;

import java.util.ArrayList;

import model.Usuario;
import protocol.MensajeComando;
import server.ClienteHilo;
import server.Servidor;
import server.services.AmigosService;

public class ObtenerAmigosConectados implements ComandoServidor
{
	private Usuario usuario;

	public void ejecutar (ClienteHilo cliente)
	{

			try
			{
				/*
				 * Le envio al cliente una lista con los amigos conectados al chat. El hilo en escucha del lado del cliente (ClienteSession)
				 * recibe el comando, lo busca en la lista ComandoManejador y por defecto ya sabe que lo envia el servidor
				 * por lo tanto la clase ObtenerUsuariosConectados del lado del cliente dentro del paquete comandos realiza una determinada 
				 * accion sabiendo esto (invocadoPorServidor = true)
				 */
				AmigosService servicioAmigos = new AmigosService();
				Usuario user = (Usuario) cliente.getInput().readObject();
				
				ArrayList<Usuario> amigos = (ArrayList<Usuario>) servicioAmigos.amigosDe(user);
				
				ArrayList<Usuario> amigosConectados = new ArrayList<Usuario>();				
				for(Usuario u : amigos)
						if (Servidor.isConectado(u))
							amigosConectados.add(u);	
				
				//Le envio al cliente un mensaje indicando que se va enviar la lista de amigos
				System.out.println("Amigos - Obteniendo amigos conectados de <" + user.getNick()+">");
				cliente.getOutput().writeObject(new MensajeComando("obtener_amigos_conectados",0));
				cliente.getOutput().flush();
				
				//Le envio la lista de amigos
				cliente.getOutput().writeObject(amigosConectados);
				cliente.getOutput().flush();
				
			}
			catch (Exception e)	{
				e.printStackTrace();
				System.out.println("Problema al ejecutar el comando");
			}
			

	}
	
	public Usuario getUsuario() {
		return usuario;
	}

	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}
	
}
